package com.example.demo.mapper;

import com.example.demo.entity.ContractTemplate;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 合同模版 Mapper
 *
 * @author Ethan Blake
 * @version 1.0
 * @since 2024/8/30
 */
public interface ContractTemplateMapper {

    /**
     * 添加合同模版
     *
     * @param template 待添加的合同模版信息
     * @return 受影响的行数
     */
    int insert(ContractTemplate template);

    /**
     * 删除更新合同模版
     *
     * @param id 待删除合同模版的ID
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 更新合同模版类别信息
     *
     * @param id       合同模版ID
     * @param template 待更新的合同模版数据
     * @return 受影响的行数
     */
    int updateById(@Param("id") Integer id, @Param("template") ContractTemplate template);

    /**
     * 更新合同模版信息 (为null的属性将被忽略)
     *
     * @param id       合同模版ID
     * @param template 待更新的合同模版数据
     * @return 受影响的行数
     */
    int updateSelectiveById(@Param("id") Long id, @Param("template") ContractTemplate template);

    /**
     * 获取所有合同模版
     *
     * @return 合同模版列表
     */
    List<ContractTemplate> findAll();

    /**
     * 根据ID查询合同模版信息
     *
     * @param id 合同模版ID
     * @return 对应ID合同模版信息, 如果不存在则返回Null
     */
    ContractTemplate findById(Long id);


    /**
     * 根据合同模版类别ID查询所有合同模版
     *
     * @param categoryId 合同模版类别ID
     * @return 指定类别的合同模版列表
     */
    List<ContractTemplate> findByCategoryId(Integer categoryId);
}
